/**
 * Framework principal com ferramentas de auxílio ao desenvolvimento.
 *
 * @class oeds
 *  @constructor
 */

var oeds = {
    mediaChannel:{},
    audioLocalEstaMudo:false,
    isMediaAtualPausada:false,
    idElementoAtual:"",
    audioGlobalEstaMudo:false,
    pauseGlobalAtivo:false,
    allTweens:"",
    idVideoAtual:"",
    carregarAssetsMedia:function(legendas, idElemento, callback){
        $("#video-control").css('display','block');
        $("#init-menu").css('display','block');

        this.legendaAPI.posicaoLegendaAtual=0;
        this.playMedia(idElemento)
        this.legendaAPI.idElementoAtual = idElemento;
        this.idElementoAtual = idElemento;
        this.legendaAPI.legendas = legendas;
        console.log(this.idElemento);
        console.log(JSON.stringify(this.legendaAPI.legendas));
        var that = this;
        this.mediaChannel.on('ended',function(){
            $("#init-menu").css('display','none');
            $("#video-control").css('display','none');
            $("#menu-video").css('display','none');
            $("#legenda").css('display','none');
            callback();
        });
        this.mediaChannel.on('timeupdate',function(){
            var duracaoTotalMinutos= Math.floor(Math.floor(this.duration)/60);
            var duracaoTotalSegundos=Math.floor(this.duration)%60;
            var textoDuracao = "";
            if (duracaoTotalMinutos<=0){
                textoDuracao = "0:";
            }else{
                textoDuracao= duracaoTotalMinutos+":";
            }
            if (duracaoTotalSegundos<10&&duracaoTotalSegundos!=0){
                textoDuracao+="0"+duracaoTotalSegundos
            }else if(duracaoTotalSegundos==0){
                textoDuracao+='00';
            }else{
                textoDuracao+=duracaoTotalSegundos;
            }

            $('#video-control > #duracao').text(textoDuracao)
            var valorSeekBar = this.currentTime* (100 / this.duration);
            //var tempoHorasAtual;
            var tempoMinutosAtual= Math.floor(Math.floor(this.currentTime)/60);
            var tempoSegundosAtual=Math.floor(this.currentTime)%60;
            var textoTempo = "";
            if (tempoMinutosAtual<=0){
                textoTempo = "0:";
            }else{
                textoTempo= tempoMinutosAtual+":";
            }
            if (tempoSegundosAtual<10&&tempoSegundosAtual!=0){
                textoTempo+="0"+tempoSegundosAtual
            }else if(tempoSegundosAtual==0){
                textoTempo+='00';
            }else{
                textoTempo+=tempoSegundosAtual;
            }
            $('#seek-bar').val(valorSeekBar);
            $('#video-control > #tempo-atual').text(textoTempo)
            that.legendaAPI.playLegenda(that.mediaChannel);
        })


    },
    legendaAPI:{
        idElementoAtual:"video",
        legendas:[],
        posicaoLegendaAtual:0,
        isLegendaAtivada:false,
        ligaDesligaLegenda:function(){
            this.isLegendaAtivada = !this.isLegendaAtivada;
        },

        playLegenda:function(audioChannel){
            var tempoAtual = audioChannel.get(0).currentTime;
            if(this.legendas[this.posicaoLegendaAtual]!= undefined){
                if(tempoAtual >= this.legendas[this.posicaoLegendaAtual].tempoInicial && tempoAtual <= this.legendas[this.posicaoLegendaAtual].tempoFinal){

                    $('#legenda > p').css('display','inline')
                    $('#legenda').css('display','block')
                    $('#legenda > p').text(this.legendas[this.posicaoLegendaAtual].texto)
                    if(!this.isLegendaAtivada){
                        $('#legenda > p').css('display','none')
                    }
                }else if(tempoAtual <= this.legendas[this.posicaoLegendaAtual].tempoInicial){
                    $('#legenda > p').css('display','none')
                }else{
                    this.posicaoLegendaAtual++;
                }
            }else{
                $('#legenda > p').css('display','none')
            }
        }
    },

    mediaPlayPause:function(){
        if(this.mediaChannel.get(0).paused){
            this.isMediaAtualPausada = false;
            this.mediaChannel.get(0).play();
            $('#play-pause').removeClass('play');
            $('#play-pause').addClass('pause');

        }else{
            this.pausar();
            this.isMediaAtualPausada = true;
            $('#play-pause').removeClass('pause');
            $('#play-pause').addClass('play');
        }
    },
    initControleVideo: function(){
        $("#base").append(
            '<div id="video-control">' +
            '<button type="button" id="play-pause" class="pause" onclick="oeds.mediaPlayPause(oeds.idElementoAtual)"></button>' +
            '<span id="tempo-atual">0:00</span>'+
            '<input type="range" id="seek-bar" onchange="oeds.tracking()" onmousedown="oeds.pausar(oeds.idElementoAtual)" onmouseup="oeds.playMedia(oeds.idElementoAtual)" value="0">'+
            '<span id="duracao">0:00</span>'+
            '<button type="button" id="mute" onclick="oeds.volumeOnOff(oeds.idElementoAtual)"></button>'+
            '</div>' +
            '<button type="button" id="init-menu" onclick="oeds.mostrarMenuVideo()"></button>' +
            '<div id="menu-video">' +
            '<li><a onclick="oeds.legendaAPI.ligaDesligaLegenda()">Legenda</a></li>' +
            '<li>INÍCIO</li>' +
            '<li>AUDIO</li>' +
            '<li>TELA CHEIA</li>' +
            '<li>AJUDA</li>' +
            '<li>CRÉDITO</li>' +
            '<li>FECHAR</li>' +
            '</div>')
        //TODO http://stackoverflow.com/questions/13913637/html5-input-range-styling-before ver isso depois

    },
    tracking:function(){
        var time = this.mediaChannel.get(0).duration * ($('#seek-bar').val() / 100);
        this.mediaChannel.get(0).currentTime = time;
        var tempoAtual = this.mediaChannel.get(0).currentTime;
        var that =  this;
        $.each(this.legendaAPI.legendas, function(index,obj){
            if(obj.tempoInicial<=tempoAtual && obj.tempoFinal>=tempoAtual){
                console.log(JSON.stringify(obj));
                that.legendaAPI.posicaoLegendaAtual = index;
                return false
            }else if(obj.tempoInicial> tempoAtual ){
                that.legendaAPI.posicaoLegendaAtual = index-1;
                return false
            }
        });
    },
    mostrarMenuVideo:function(){
        if ($('#menu-video').css('display')=='block'){
            $('#menu-video').css('display','none');
        }else{
            $('#menu-video').css('display','block');
        }
    },

    /**
     * Inicia as funções principais do framework.
     *
     * @method inicializar
     */
    inicializar:function(){
        //this.mostrarModalFinal();
        this.initControleVideo();
        this.redimensionar();
        window.addEventListener("resize", this.redimensionar, true);
    },
    /**
     * faz com que a resolução seja obedecida de acordo com o tamanho da janela
     *
     * @method redimensionar
     */
    redimensionar: function(widthParam, heightParam){
        if (widthParam == undefined||heightParam == undefined ){
            widthParam = 768;
            heightParam = 1024;
        }
        var ViewP = document.getElementsByTagName('html')[0],
            heigthView = window.innerHeight,
            widthView = window.innerWidth,
            factorView = Math.min(heigthView/widthParam,widthView/heightParam);

        ViewP.style.webkitTransform ='scale('+factorView+')';
        ViewP.style.transform = 'scale('+factorView+')';
        window.focus();
    },
    volumeOnOff:function(idElemento){
        console.log($('#'+idElemento).get(0).muted);

        if($('#'+idElemento).get(0).muted){
            console.log('true');
            this.volumeOn(idElemento);
        }else{
            console.log('false');
            this.volumeOff(idElemento);
        }
    },

    /**
     * torna a página inteira muda
     * @method volumeOff
     */
    volumeOff: function(idElemento){

        console.log(idElemento);
        if(idElemento == undefined){
            this.audioGlobalEstaMudo = true;
            $('audio').each(function(){
                this.muted = true;
            })
            if(this.idElementoAtual!==""){
                this.mediaChannel.get(0).muted = true;
            }

        }else{

            this.audioLocalEstaMudo = true;
            $('#'+idElemento).get(0).muted = true;
        }

    },
    /**
     * Liga o som de todos os elementos
     *
     * @method volumeOn
     */
    volumeOn: function(idElemento){
        console.log('volumeOn');
        if(idElemento==undefined){
            this.audioGlobalEstaMudo = false;
            $('audio').each(function(){
                this.muted = false;
            })

            if(this.idElementoAtual!==""){
                this.mediaChannel.get(0).muted = false;
            }
            if(this.audioLocalEstaMudo){
                this.mediaChannel.get(0).muted = true;
            }

        }else{
            this.audioLocalEstaMudo= false;
            $('#'+idElemento).get(0).muted = false;
        }
    },
    /**
     * Toca o áudio escolhido, caso tenha outra trilha de audio tocando, essa será pausada
     *
     * @method playMedia
     * @param {String} elementId id do Audio
     */
    playMedia: function(elementId){
        console.log(this.mediaChannel);
        if(this.idElementoAtual!= elementId){
            this.idElementoAtual = elementId;

            if(Object.keys(this.mediaChannel).length>0){
                this.mediaChannel.get(0).currentTime  = 0;
                this.mediaChannel.get(0).pause();
            }
            this.mediaChannel = $('#'+elementId);
            if(this.audioGlobalEstaMudo){
                this.mediaChannel.get(0).muted = true;
            }else{
                this.mediaChannel.get(0).muted = false;
            }

            this.mediaChannel.currentTime = 0;
        }
        console.log(this.mediaChannel)
        this.mediaChannel.get(0).play();

    },

    /**
     * Pausa o a mídia de áudio ou vídeo, caso não seja passado nenhum parâmetro pausa todas as mídias em reprodução
     *
     * @method pausar
     * @param {String} elementoID id do elemento
     */
    pausar:function(){
        console.log(this.mediaChannel)
        this.mediaChannel.get(0).pause();
    },

    /**
     * Botão de pause ou resume global, funciona como uma função pause que torna inoperável a tela quando o botão é pressionado
     *
     * @method pauseResume
     */
    pauseResume:function(){
        this.allTweens=TweenLite.getTweensOf("*")
        var that = this;
        try {
            if (this.pauseGlobalAtivo) {
                $('#fadePause').css({"z-index": "0", "opacity": "0"})
                $('#fadePause').css('display', 'none')

                $('audio').each(function () {
                    if (that.idElementoAtual != "") {
                        this.play(); // Stop playing
                    }
                });
                if (this.isMediaAtualPausada) {
                    this.mediaChannel.get(0).pause();
                } else if (that.idElementoAtual != "") {

                    this.mediaChannel.get(0).play();
                }
                for (var prop in this.allTweens) {
                    try {
                        this.allTweens[prop].play();
                    } catch (e) {
                    }
                }
            } else {
                $('#fadePause').css('display', 'block');
                $('#fadePause').css({"z-index": "10", "opacity": "0.3"})
                if (this.idElementoAtual != '') {
                    this.pausar();
                }
                $('audio').each(function () {
                    this.pause();
                });
                for (var prop in this.allTweens) {
                    console.log(this.allTweens);

                        this.allTweens[prop].pause();

                }
            }
        }catch(e){};

        this.pauseGlobalAtivo = !this.pauseGlobalAtivo;
    },
    playEffects:function(id){
        if(this.audioGlobalEstaMudo){
            $('#'+id).get(0).muted=true;
        }
        $('#'+id).get(0).play();
    },
    mostrarModalFinal:function(){
        $("#base").append(
            '<div id="modal">' +
            '<div id="principal"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' +
            'Maecenas placerat vitae ipsum non maximus. Mauris et auctor augue. ' +
            'Nam tincidunt volutpat massa sed pharetra. Nunc varius lectus non eros posuere, vel fringilla felis blandit. Morbi vel massa sollicitudin magna maximus sagittis. ' +
            'Fusce semper libero sed ex vestibulum, et sagittis odio dictum. ' +
            'Fusce bibendum, nulla sit amet rutrum eleifend, augue dolor vulputate nisl, at venenatis leo turpis gravida enim. ' +
            'Phasellus est mi, porta non ante quis, accumsan sagittis urna. ' +
            'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. ' +
            'Nulla non orci purus. Vestibulum posuere, magna ut facilisis ultrices, risus sapien varius nulla, et eleifend odio tortor vel sem. ' +
            'Suspendisse venenatis finibus tellus, sit amet mollis odio venenatis sit amet.' +
            ' Vestibulum pretium dui gravida ligula condimentum eleifend. ' +
            'Phasellus dictum, tortor ac mollis condimentum, dolor metus hendrerit augue, ' +
            'a molestie nisi tellus vitae mi. Nullam magna purus, dignissim in leo eget, tempor ultricies felis. Nulla tempus sed mauris quis tristique.</p></div>' +
            '</div>')
    }

}
oeds.inicializar();



